const p1 = Promise.resolve('resolve p1')
const p2 = Promise.reject('reject p2')
const p3 = Promise.resolve('resolve p3')

Promise.all([p1, p2, p3]).then(response=>{
  console.log('1 all response', response)
}).catch(error=>{
  console.log('1 all error', error)
})

// 通过对all中传递的数组元素进行单独的catch error
// 当阻止all方法中catch到错误，保证所有元素都是按照resolve返回
Promise.all([
  p1.catch(error=> console.log(error) ), 
  p2.catch(error=> {return error}), 
  p3.catch(error=> {})
]).then(response=>{
  console.log('2 all response', response)
}).catch(error=>{
  console.log('2 all error', error)
})

// 相当于
p2.catch(error=>{
  console.log('error', error)
  return error
}).then(res=>{
  console.log('res', res)
})